package mx.edu.itsur.sism.model;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.apache.commons.lang.builder.ToStringBuilder;

@Entity
@Table(name="sism_Maquina")
public class Maquina extends BaseObject implements Serializable {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="maquinaId")
	private Long id;

	@Column(nullable=false)
	private String marca;
	
	@Column(nullable=false)
	private String modelo;
	
	@Column(nullable=false)
	private String noSerie;
	
	@Column(nullable=false)
	private String galga;
	
	@Column(nullable=true)
	private String estatus;
	
	@OneToMany (mappedBy="maquina") //Apunta al campo maquina en piezaPaltante.
	@Column(name="piezaFaltanteId") //inverse = true
	private Set<PiezaFaltante> piezasFaltantes;
	
	@OneToMany (mappedBy="maquina") //Apunta al campo maquina en Movimiento.
	@Column(name="movimientoId") //inverse = true
	private Set<Movimiento> movimientos;

	/**
	 * Constructor
	 * 
	 * @param marca
	 * @param modelo
	 * @param noSerie
	 * @param galga
	 */
	public Maquina(String marca, String modelo, String noSerie, String galga) {
		super();
		this.marca = marca;
		this.modelo = modelo;
		this.noSerie = noSerie;
		this.galga = galga;
	}
	
	/**
	 * Default Constructor
	 */
	public Maquina() {
		// TODO Auto-generated constructor stub
	}

	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}

	public String getMarca() {
		return marca;
	}
	public void setMarca(String marca) {
		this.marca = marca;
	}

	public String getModelo() {
		return modelo;
	}
	public void setModelo(String modelo) {
		this.modelo = modelo;
	}
	
	public String getNoSerie() {
		return noSerie;
	}
	public void setNoSerie(String noSerie) {
		this.noSerie = noSerie;
	}
	
	public String getGalga() {
		return galga;
	}
	public void setGalga(String galga) {
		this.galga = galga;
	}
	
	public String getEstatus() {
		return estatus;
	}
	public void setEstatus(String estatus) {
		this.estatus = estatus;
	}
	
	public Set<PiezaFaltante> getPiezasFaltantes() {
		return piezasFaltantes;
	}
	public void setPiezasFaltantes(Set<PiezaFaltante> piezasFaltantes) {
		this.piezasFaltantes = piezasFaltantes;
	}
	
	public Set<Movimiento> getMovimientos() {
		return movimientos;
	}
	public void setMovimientos(Set<Movimiento> movimientos) {
		this.movimientos = movimientos;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 0;
		result = prime * result + ((galga == null) ? 0 : galga.hashCode());
		result = prime * result + ((marca == null) ? 0 : marca.hashCode());
		result = prime * result + ((modelo == null) ? 0 : modelo.hashCode());
		result = prime * result + ((noSerie == null) ? 0 : noSerie.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!(obj instanceof Maquina))
			return false;
		Maquina other = (Maquina) obj;
		if (estatus == null) {
			if (other.estatus != null)
				return false;
		} else if (!estatus.equals(other.estatus))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (galga == null) {
			if (other.galga != null)
				return false;
		} else if (!galga.equals(other.galga))
			return false;
		if (marca == null) {
			if (other.marca != null)
				return false;
		} else if (!marca.equals(other.marca))
			return false;
		if (modelo == null) {
			if (other.modelo != null)
				return false;
		} else if (!modelo.equals(other.modelo))
			return false;
		if (movimientos == null) {
			if (other.movimientos != null)
				return false;
		} else if (!movimientos.equals(other.movimientos))
			return false;
		if (noSerie == null) {
			if (other.noSerie != null)
				return false;
		} else if (!noSerie.equals(other.noSerie))
			return false;
		if (piezasFaltantes == null) {
			if (other.piezasFaltantes != null)
				return false;
		} else if (!piezasFaltantes.equals(other.piezasFaltantes))
			return false;
		return true;
	}
	
	/**
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return new ToStringBuilder(this)
				.append("id", this.id)
				.append("noSerie", this.noSerie)
				.append("marca", this.marca)
				.append("modelo", this.modelo)
				.append("galga", this.galga)
				.append("estatus", this.estatus)
				.toString();
	}
	
	
	
	
}
